/**
 * @file seasky_protocol.c
 * @author Liu Wei
 * @author modified by Neozng
 * @brief 湖南大学RoBoMatster串口通信协议
 * @version 0.1
 * @date 2022-11-03
 *
 * @copyright Copyright (c) 2022
 *
 */

#include "seasky_protocol.h"
#include "crc8.h"
#include "crc16.h"
#include "memory.h"

// /*获取CRC8校验码*/
// uint8_t Get_CRC8_Check(uint8_t *pchMessage,uint16_t dwLength)
// {
//     return crc_8(pchMessage,dwLength);
// }
// /*检验CRC8数据段*/
// static uint8_t CRC8_Check_Sum(uint8_t *pchMessage, uint16_t dwLength)
// {
//     uint8_t ucExpected = 0;
//     if ((pchMessage == 0) || (dwLength <= 2))
//         return 0;
//     ucExpected = crc_8(pchMessage, dwLength - 1);
//     return (ucExpected == pchMessage[dwLength - 1]);
// }

// /*获取CRC16校验码*/
// uint16_t Get_CRC16_Check(uint8_t *pchMessage,uint32_t dwLength)
// {
//     return crc_16(pchMessage,dwLength);
// }

// /*检验CRC16数据段*/
// static uint16_t CRC16_Check_Sum(uint8_t *pchMessage, uint32_t dwLength)
// {
//     uint16_t wExpected = 0;
//     if ((pchMessage == 0) || (dwLength <= 2))
//     {
//         return 0;
//     }
//     wExpected = crc_16(pchMessage, dwLength - 2);
//     return (((wExpected & 0xff) == pchMessage[dwLength - 2]) && (((wExpected >> 8) & 0xff) == pchMessage[dwLength - 1]));
// }

// /*检验数据帧头*/
// static uint8_t protocol_heade_Check(protocol_rm_struct *pro, uint8_t *rx_buf)
// {
//     if (rx_buf[0] == PROTOCOL_CMD_ID)
//     {
//         pro->header.sof = rx_buf[0];
//         if (CRC8_Check_Sum(&rx_buf[0], 4))
//         {
//             pro->header.data_length = (rx_buf[2] << 8) | rx_buf[1];
//             pro->header.crc_check = rx_buf[3];
//             pro->cmd_id = (rx_buf[5] << 8) | rx_buf[4];
//             return 1;
//         }
//     }
//     return 0;
// }

// /*
//     此函数根据待发送的数据更新数据帧格式以及内容，实现数据的打包操作
//     后续调用通信接口的发送函数发送tx_buf中的对应数据
// */
void get_protocol_send_data(int32_t *tx_data,          // 待发送的float数据
                            uint8_t *tx_buf          // 待发送的数据帧
                                            )
{
    //tx_buf[0] = 0xA9;

    /*float数据段*/
    // for (int i = 0; i < 4 * 2; i++)
    // {
    //     tx_buf[i + 1] = ((uint8_t *)(&tx_data[i / 4]))[i % 4];
    // }
    for (int i = 0; i < 5; i++)
    {
        tx_buf[i] = ((uint8_t *)tx_data)[i];
    }

    //tx_buf[4] = 0xB8;
}
// /*
//     此函数用于处理接收数据，
//     返回数据内容的id
// */
uint16_t get_protocol_info(uint8_t *rx_buf,          // 接收到的原始数据
                           uint8_t *rx_data)         // 接收的float数据存储地址
{
    //if(rx_buf[0] == 0xA9 && rx_buf[12] == 0xB8)
    //{
        memcpy(rx_data, rx_buf, 15);
        return 1;
    //}
    //return 0;
}
